#ifndef _RICHTEXTTABSPAGE_H_
#define _RICHTEXTTABSPAGE_H_

#include "wx/wxprec.h"
#include "wx/spinbutt.h"
#include "wx/spinctrl.h"
#include "wx/statline.h"
#include "wx/richtext/richtextbuffer.h"
#include "wx/richtext/richtextctrl.h"
#include "wx/richtext/richtextformatdlg.h"
#include "wx/richtext/richtextsymboldlg.h"

#define SYMBOL_WXRICHTEXTTABSPAGE_STYLE wxRESIZE_BORDER|wxTAB_TRAVERSAL
#define SYMBOL_WXRICHTEXTTABSPAGE_TITLE _("wxRichTextFontPage")
#define SYMBOL_WXRICHTEXTTABSPAGE_IDNAME ID_RICHTEXTTABSPAGE
#define SYMBOL_WXRICHTEXTTABSPAGE_SIZE wxSize(400, 300)
#define SYMBOL_WXRICHTEXTTABSPAGE_POSITION wxDefaultPosition

class wxRichTextTabsPage: public wxPanel {
    DECLARE_DYNAMIC_CLASS( wxRichTextTabsPage )
    DECLARE_EVENT_TABLE()

  public:
    /// Constructors
    wxRichTextTabsPage( );
    wxRichTextTabsPage( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = SYMBOL_WXRICHTEXTTABSPAGE_POSITION, const wxSize& size = SYMBOL_WXRICHTEXTTABSPAGE_SIZE, long style = SYMBOL_WXRICHTEXTTABSPAGE_STYLE );

    /// Creation
    bool Create( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = SYMBOL_WXRICHTEXTTABSPAGE_POSITION, const wxSize& size = SYMBOL_WXRICHTEXTTABSPAGE_SIZE, long style = SYMBOL_WXRICHTEXTTABSPAGE_STYLE );

    /// Creates the controls and sizers
    void CreateControls();

    /// Initialise members
    void Init();

    /// Transfer data from/to window
    virtual bool TransferDataFromWindow();
    virtual bool TransferDataToWindow();

    /// Sorts the tab array
    virtual void SortTabs();

    /// Gets the attributes associated with the main formatting dialog
    wxTextAttrEx* GetAttributes();

    ////@begin wxRichTextTabsPage event handler declarations

    /// wxEVT_COMMAND_LISTBOX_SELECTED event handler for ID_RICHTEXTTABSPAGE_TABLIST
    void OnTablistSelected( wxCommandEvent& event );

    /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTTABSPAGE_NEW_TAB
    void OnNewTabClick( wxCommandEvent& event );

    /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTTABSPAGE_NEW_TAB
    void OnNewTabUpdate( wxUpdateUIEvent& event );

    /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTTABSPAGE_DELETE_TAB
    void OnDeleteTabClick( wxCommandEvent& event );

    /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTTABSPAGE_DELETE_TAB
    void OnDeleteTabUpdate( wxUpdateUIEvent& event );

    /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_RICHTEXTTABSPAGE_DELETE_ALL_TABS
    void OnDeleteAllTabsClick( wxCommandEvent& event );

    /// wxEVT_UPDATE_UI event handler for ID_RICHTEXTTABSPAGE_DELETE_ALL_TABS
    void OnDeleteAllTabsUpdate( wxUpdateUIEvent& event );
    wxBitmap GetBitmapResource( const wxString& name );

    /// Retrieves icon resources
    wxIcon GetIconResource( const wxString& name );
    ////@end wxRichTextTabsPage member function declarations

    /// Should we show tooltips?
    static bool ShowToolTips();

    ////@begin wxRichTextTabsPage member variables
    wxTextCtrl* m_tabEditCtrl;
    wxListBox* m_tabListCtrl;
    /// Control identifiers
    enum {
      ID_RICHTEXTTABSPAGE = 10200,
      ID_RICHTEXTTABSPAGE_TABEDIT = 10213,
      ID_RICHTEXTTABSPAGE_TABLIST = 10214,
      ID_RICHTEXTTABSPAGE_NEW_TAB = 10201,
      ID_RICHTEXTTABSPAGE_DELETE_TAB = 10202,
      ID_RICHTEXTTABSPAGE_DELETE_ALL_TABS = 10203
    };
    ////@end wxRichTextTabsPage member variables

    bool m_tabsPresent;
};

#endif
